import { Cache } from '../../common/utils/Common';
import router from '@ohos.router';

export default {
    data: {
        // navbar 播放需要的参数
        currentPlay: {
            id: 0,
            title: '留言',
            cover: 'https://p1.music.126.net/8g2Pn9Xw1m7cFhxOlc3BMg==/109951167875709379.jpg?param=140y140',
            singer: '张学友',
            desc: '释放自己',
            playing: false
        },
        // 收藏音乐列表
        collectionList: [
            {
                id: 1,
                cover: 'https://p1.music.126.net/__V3aKm7yV5HJCX_t64yxQ==/63771674423249.jpg?param=130y130',
                title: '留言',
                singer: '张学友',
                desc: '释放自己',
                playing: false
            },
            {
                id: 2,
                cover: 'https://p1.music.126.net/7SNr9GLslb3Y4ku-sVUn5A==/4418937232046263.jpg?param=130y130',
                title: '负亲',
                singer: '小肥',
                desc: '',
                playing: false
            },
            {
                id: 3,
                cover: 'https://p2.music.126.net/xczV2xdx3VRwSo9FWqq_3g==/109951163676387996.jpg?param=130y130',
                title: '永远飞行模式',
                singer: 'Dear Jane',
                desc: '哪里只得我共你，不许你注定一人。',
                playing: false
            },
            {
                id: 4,
                cover: 'https://p2.music.126.net/3lrUXI96dmlEi2UgeIhOHg==/109951163076301483.jpg?param=130y130',
                title: '他一定很爱你',
                singer: '阿杜',
                desc: '我不应该在车里，我应该在车底!~',
                playing: false
            },
            {
                id: 5,
                cover: 'https://p1.music.126.net/jR_A_vL1ngAml2mb16L20w==/3320525116753321.jpg?param=130y130',
                title: '罗生门',
                singer: '麦浚龙 / 谢安琪',
                desc: '忘了吧？未必吧',
                playing: false
            },
            {
                id: 6,
                cover: 'https://p2.music.126.net/CUFDJr7kFgmjoI7YSiGm4A==/109951166863299666.jpg?param=130y130',
                title: '我的回忆不是我的(粤)',
                singer: '海明威',
                desc: '',
                playing: false
            }
        ],
        // 最近播放音乐列表
        recentList: [],
        // 列表 list
        musicList: [],
        // 获取列表的模式
        listMode: router.getParams() ? router.getParams().mode : 0,
        // 判断是否为空
        empty: false,
        // 选择动画
        selectActive: 1,
    },
    onInit() {
        this.musicList = this.listMode == 0 ? this.collectionList : this.recentList;
        this.empty = this.musicList.length == 0;
        let cache = this.$app.$def.cache;
        if (cache) {
            this.getRecentList();
            this.checkCoincide();
        }
    },
    onReady() {
        this.$watch('listMode', this.onListModeChange);
        this.$watch('musicList', this.onMusicListChange);
    },
    checkCoincide() {
        let cache;
        if (!(cache = this.$app.$def.cache)) {
            this.$app.$def.cache = new Cache();
            cache = new Cache();
        }
        let currentPlay = cache.get('currentPlay');
        if (currentPlay) {
            this.musicList.forEach(music => {
                if (music.id == currentPlay.id) {
                    music.playing = currentPlay.playing;
                }
            })
        }
    },
    /**
     * 点击按钮切换列表
     * @param mode: 0 收藏列表 | 1 最近听的列表
     */
    changeList(mode) {
        this.listMode = mode;
    },
    /**
     * 监听当前音乐列表的变化
     * @param n 新的列表变化
     */
    onMusicListChange(n) {
        this.empty = n.length == 0;
        // 获取当前播放的歌曲，看看有没有与推荐列表重合
        let cache = this.$app.$def.cache;
        let currentPlay = cache.get('currentPlay');
        if (currentPlay) {
            this.musicList.forEach(music => {
                if (music.id == currentPlay.id) {
                    music.playing = currentPlay.playing;
                }
            })
        }
    },
    /**
     * 监听列表状态修改
     * @param n 0: 收藏列表 | 1: 最近听的列表
     */
    onListModeChange(n) {
        if (n == 1) {
            this.getRecentList();
        }
        this.musicList = n == 0 ? this.collectionList : this.recentList;
    },
    itemClick(mode) {
        this.selectActive = mode;
    },
    /**
     * 获取最近播放的音乐列表
     */
    getRecentList() {
        // 如果是最近播放的，则从缓存中查找并加入最近播放的音乐列表
        let cache = this.$app.$def.cache;
        if (cache) {
            let list = [];
            let keys = cache.getKeys();
            if (keys && keys[0]) {
                keys.forEach(k => {
                    if (k != 'currentPlay' && k != 'currentDeg') {
                        list.push(cache.get(k));
                    }
                })
            }
            this.recentList = list;
            if (this.listMode == 1) {
                this.musicList = this.recentList;
                this.empty = this.musicList.length == 0;
            }
        }
    },

    /**
     * 当使用 nav 进行播放。
     * @param val 当前播放音乐的 id
     */
    navPlay(val) {
        this.currentPlay.id = val.detail;
        this.searchPlayFunc(true);
    },
    /**
     * 当使用 nav 停止播放。
     * @param val 当前播放音乐的 id
     */
    navStop(val) {
        this.currentPlay.id = val.detail;
        this.searchPlayFunc(false);
    },
    /**
     * 播放音乐 由 music_item 传入
     * @param val 音乐信息
     */
    playMusic(val) {
        let data = val.detail;
        Object.assign(this.currentPlay, data);
        // 在数组中开放 playing
        this.searchPlayFunc(true);
    },
    /**
     * 停止音乐，由 music_item 传入
     * @param val 音乐信息
     */
    stopMusic(val) {
        let data = val.detail;
        Object.assign(this.currentPlay, data);
        this.searchPlayFunc(false);
    },
    /**
     * 查询播放的 music
     * <ul>
     *  <li> open 为 true，在 {#code loveMusics} 中找到同类 Music 并关闭其播放状态，而后打开当前播放音乐的状态。
     *  <li> open 为 false，关闭当前播放音乐
     *  <li> 该方法主要控制 music_item 的播放状态
     * @param open
     */
    searchPlayFunc(open) {
        let list = this.listMode == 0 ? this.collectionList : this.recentList;
        let cache = this.$app.$def.cache;
        // 在数组中开放 playing
        list.forEach(music => {
            if (open) {
                let id;
                // 如果是开启播放状态，那么将同类的播放状态关闭，同时也要更新缓存
                if ((id = music.id) != this.currentPlay.id) {
                    music.playing = false;
                    let data = cache.get(id);
                    if (data) {
                        data.playing = false;
                        cache.set(id, data);
                    }
                }
            }
            // 由父类控制播放
            if (music.id == this.currentPlay.id) {
                music.playing = open;
                this.currentPlay.playing = open;
                // 保存 currentPlay
                let json = JSON.parse(JSON.stringify(this.currentPlay));
                cache.set(this.currentPlay.id, json);
                if (open) {
                    // 如果为播放状态，那么 currentPlay 为当前数据
                    cache.set('currentPlay', this.currentPlay);
                }
            }
        })
    }
}
